{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "<p align=\"center\">\n",
    "    <img src=\"https://github.com/GeostatsGuy/GeostatsPy/blob/master/TCG_color_logo.png?raw=true\" width=\"220\" height=\"240\" />\n",
    "\n",
    "</p>\n",
    "\n",
    "### Interactive Distribution Transformations in Python \n",
    "\n",
    "\n",
    "#### Michael Pyrcz, Professor, The University of Texas at Austin \n",
    "\n",
    "##### [Twitter](https://twitter.com/geostatsguy) | [GitHub](https://github.com/GeostatsGuy) | [Website](http://michaelpyrcz.com) | [GoogleScholar](https://scholar.google.com/citations?user=QVZ20eQAAAAJ&hl=en&oi=ao) | [Book](https://www.amazon.com/Geostatistical-Reservoir-Modeling-Michael-Pyrcz/dp/0199731446) | [YouTube](https://www.youtube.com/channel/UCLqEr-xV-ceHdXXXrTId5ig)  | [LinkedIn](https://www.linkedin.com/in/michael-pyrcz-61a648a1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature Engineering with Distribution Transformations\n",
    "\n",
    "Here are 2 interactive workflows demonstrationing distribution transformations, a common, essential tool for feature engineering for predictive machine learning.\n",
    "\n",
    "I have recorded a walk-through of this interactive dashboard in my [Data Science Interactive Python Demonstrations](https://www.youtube.com/playlist?list=PLG19vXLQHvSDy26fM3hDLg3VCU7U5BGZl) series on my [YouTube](https://www.youtube.com/@GeostatsGuyLectures) channel.\n",
    "\n",
    "* Join me for walk-through of this dashboard [04 Data Science Interactive: Distribution Transformations](TBD). I'm stoked to guide you and share observations and things to try out!   \n",
    "\n",
    "* I have a lecture on [Distribution Transformation](https://www.youtube.com/watch?v=ZDIpE3OkAIU&list=PLG19vXLQHvSB-D4XKYieEku9GQMQyAzjJ&index=14) as part of my [Data Analytics and Geostatistics](https://www.youtube.com/playlist?list=PLG19vXLQHvSB-D4XKYieEku9GQMQyAzjJ) course. Note, for all my recorded lecture the interactive and well-documented workflow demononstrations are available on my GitHub repository [GeostatsGuy's Python Numerical Demos](https://github.com/GeostatsGuy/PythonNumericalDemos).\n",
    "\n",
    "* Also, I have a lecture on [Feature Transformations for Machine Learning](https://www.youtube.com/watch?v=6QJjZoWknEI&list=PLG19vXLQHvSC2ZKFIkgVpI9fCjkN38kwf&index=9) as part of my [Machine Learning](https://www.youtube.com/playlist?list=PLG19vXLQHvSC2ZKFIkgVpI9fCjkN38kwf) course.\n",
    "\n",
    "* Finally, I have a lecture on [Q-Q plots](https://www.youtube.com/watch?v=RETZus4XBNM&list=PLG19vXLQHvSB-D4XKYieEku9GQMQyAzjJ&index=23)  as part of my [Data Analytics and Geostatistics](https://www.youtube.com/playlist?list=PLG19vXLQHvSB-D4XKYieEku9GQMQyAzjJ) course.\n",
    "\n",
    "#### Distribution Transformations Motivation\n",
    "\n",
    "With distribution transformation we map our feature to a new feature with a new distribution, e.g., we could transform our sample data to be Gaussian distributed. \n",
    "\n",
    "Why do we do this? Here are some reasons for distribution transformation in data science:\n",
    "\n",
    "* **Inference**: the feature distribution has expected shape from theory, so we are adding important information\n",
    "\n",
    "* **Data Preparation / Cleaning**: correcting for too data paucity, data noise and data outliers\n",
    "\n",
    "* **Theory**: a specific distribution assumption is required for a method, so we correct the data to have this distribution to to avoid invalidating an assumption\n",
    "\n",
    "#### Distribution Transformations\n",
    "\n",
    "How do we do it? We apply the following to all sample data, $x_{\\alpha}$ $\\forall$ $\\alpha = 1,\\ldots,n$.\n",
    "\n",
    "\\begin{equation}\n",
    "y_{\\alpha} = G^{-1}_Y\\left(F_X(x_{\\alpha})\\right)\n",
    "\\end{equation}\n",
    "\n",
    "were $X$ is the original feature with a $F_X$ original cumulative distribution function and $Y$ is transformed feature with a $G_Y$ transformed cumulative distribution function.\n",
    "\n",
    "Let's summarize this operation:\n",
    "\n",
    "* Mapping from one distribution to another through percentiles\n",
    "\n",
    "* This may be applied to any parametric or nonparametric distributions\n",
    "\n",
    "* This is a rank preserving transform, e.g. P50 of 𝑋 is P50 of 𝑌\n",
    "\n",
    "#### Distribution Transformation Dashboards\n",
    "\n",
    "To demonstrate distributions, I built out 2 dashboards:\n",
    "\n",
    "1. data to a nonparametric distribution (to match the distribution of another dataset)\n",
    "2. data to a parametric distribution (to a Gaussian distribution)\n",
    "\n",
    "#### Getting Started\n",
    "\n",
    "Here's the steps to get setup in Python with the GeostatsPy package:\n",
    "\n",
    "1. Install Anaconda 3 on your machine (https://www.anaconda.com/download/). \n",
    "\n",
    "That's all!\n",
    "\n",
    "#### Load the Required Libraries\n",
    "\n",
    "We will also need some standard Python packages. These should have been installed with Anaconda 3."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np                        # ndarrys for gridded data\n",
    "import pandas as pd                       # DataFrames for tabular data\n",
    "import matplotlib.pyplot as plt           # plotting\n",
    "from scipy import stats                   # summary statistics\n",
    "import math                               # trigonometry etc.\n",
    "import random                             # randon numbers\n",
    "from scipy.stats import norm              # Gaussian parametric distribution\n",
    "import geostatspy.GSLIB as GSLIB\n",
    "from ipywidgets import interactive        # widgets and interactivity\n",
    "from ipywidgets import widgets                            \n",
    "from ipywidgets import Layout\n",
    "from ipywidgets import Label\n",
    "from ipywidgets import VBox, HBox\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')         # supress warnings"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Set the Random Number Seed\n",
    "\n",
    "Set the random number seed so that we have a repeatable workflow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "seed = 73073"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Loading Tabular Data\n",
    "\n",
    "Here's the command to load our comma delimited data file in to a Pandas' DataFrame object.  For fun try misspelling the name. You will get an ugly, long error.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_url = \"https://raw.githubusercontent.com/GeostatsGuy/GeoDataSets/master/sample_data.csv\"\n",
    "df = pd.read_csv(data_url)     # load our data table"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It worked, we loaded our file into our DataFrame called 'df'. But how do you really know that it worked? Visualizing the DataFrame would be useful and we already leard about these methods in this demo (https://git.io/fNgRW). \n",
    "\n",
    "We can preview the DataFrame by printing a slice or by utilizing the 'head' DataFrame member function (with a nice and clean format, see below). With the slice we could look at any subset of the data table and with the head command, add parameter 'n=13' to see the first 13 rows of the dataset.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>X</th>\n",
       "      <th>Y</th>\n",
       "      <th>Facies</th>\n",
       "      <th>Porosity</th>\n",
       "      <th>Perm</th>\n",
       "      <th>AI</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>100.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.100187</td>\n",
       "      <td>1.363890</td>\n",
       "      <td>5110.699751</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>100.0</td>\n",
       "      <td>800.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.107947</td>\n",
       "      <td>12.576845</td>\n",
       "      <td>4671.458560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>100.0</td>\n",
       "      <td>700.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.085357</td>\n",
       "      <td>5.984520</td>\n",
       "      <td>6127.548006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>100.0</td>\n",
       "      <td>600.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.108460</td>\n",
       "      <td>2.446678</td>\n",
       "      <td>5201.637996</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>100.0</td>\n",
       "      <td>500.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.102468</td>\n",
       "      <td>1.952264</td>\n",
       "      <td>3835.270322</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>100.0</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.110579</td>\n",
       "      <td>3.691908</td>\n",
       "      <td>5295.267191</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       X      Y  Facies  Porosity       Perm           AI\n",
       "0  100.0  900.0     1.0  0.100187   1.363890  5110.699751\n",
       "1  100.0  800.0     0.0  0.107947  12.576845  4671.458560\n",
       "2  100.0  700.0     0.0  0.085357   5.984520  6127.548006\n",
       "3  100.0  600.0     0.0  0.108460   2.446678  5201.637996\n",
       "4  100.0  500.0     0.0  0.102468   1.952264  3835.270322\n",
       "5  100.0  400.0     0.0  0.110579   3.691908  5295.267191"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head(n=6)                           # we could also use this command for a table preview"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Calculating and Plotting a CDF by Hand\n",
    "\n",
    "Let's demonstrate the calculation and plotting of a non-parametric CDF by hand\n",
    "\n",
    "1. make a copy of the feature as a 1D array (ndarray from NumPy)\n",
    "2. sort the data in ascending order\n",
    "3. assign cumulative probabilities based on the tails assumptions\n",
    "4. plot cumulative probability vs. value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The ndarray has a shape of (261,).\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "por = df['Porosity'].copy(deep = True).values # make a deepcopy of the feature from the DataFrame\n",
    "print('The ndarray has a shape of ' + str(por.shape) + '.')\n",
    "\n",
    "por = np.sort(por)                           # sort the data in ascending order\n",
    "n = por.shape[0]                             # get the number of data samples\n",
    "\n",
    "cprob = np.zeros(n)\n",
    "for i in range(0,n):\n",
    "    index = i + 1\n",
    "    cprob[i] = index / n                     # known upper tail\n",
    "    # cprob[i] = (index - 1)/n               # known lower tail\n",
    "    # cprob[i] = (index - 1)/(n - 1)         # known upper and lower tails\n",
    "    # cprob[i] = index/(n+1)                 # unknown tails  \n",
    "\n",
    "plt.subplot(111)\n",
    "plt.plot(por,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(por,cprob,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Non-parametric Porosity Cumulative Distribution Function\")\n",
    "\n",
    "plt.subplots_adjust(left=0.0, bottom=0.0, right=1.0, top=1.2, wspace=0.1, hspace=0.2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Distribution Transformation to a Parametric Distribution\n",
    "\n",
    "We can transform our data feature distribution to any parametric distribution with this workflow.\n",
    "\n",
    "1. Calculate the cumulative probability value of each of our data values, $p_{\\alpha} = F_x(x_\\alpha)$, $\\forall$ $\\alpha = 1,\\ldots, n$.\n",
    "\n",
    "2. Apply the inverse of the target parametric cumulative distribution function (CDF) to calculate the transformed values. $y_{\\alpha} = G_y^{-1}\\left(F_x(x_\\alpha)\\right)$, $\\forall$ $\\alpha = 1,\\ldots, n$.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y = np.zeros(n)\n",
    "\n",
    "for i in range(0,n):\n",
    "    y[i] = norm.ppf(cprob[i],loc=0.0,scale=1.0)\n",
    "\n",
    "plt.subplot(121)\n",
    "plt.plot(por,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(por,cprob,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Non-parametric Porosity Cumulative Distribution Function\")\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.plot(y,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(y,cprob,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "plt.grid(); plt.xlim([-3.0,3.0]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"After Distribution Transformation to Gaussian\")\n",
    "\n",
    "plt.subplots_adjust(left=0.0, bottom=0.0, right=2.0, top=1.2, wspace=0.2, hspace=0.2)\n",
    "plt.show()\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's make an interactive version of this plot to visualize the transformation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# widgets and dashboard\n",
    "l = widgets.Text(value='                                                  Data Analytics, Distribution Transformation, Prof. Michael Pyrcz, The University of Texas at Austin',layout=Layout(width='950px', height='30px'))\n",
    "\n",
    "data_index = widgets.IntSlider(min=1, max = n-1, value=1.0, step = 10.0, description = 'Data Index, $\\\\alpha$',orientation='horizontal', style = {'description_width': 'initial'}, continuous_update=False)\n",
    "\n",
    "ui = widgets.VBox([l,data_index],)\n",
    "\n",
    "def run_plot(data_index):                       # make data, fit models and plot\n",
    "    plt.subplot(131)\n",
    "    plt.plot(por,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "    plt.scatter(por,cprob,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "    plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "    plt.xlabel(\"Original Feature, $x$\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Original Cumulative Distribution Function\")\n",
    "    plt.plot([por[data_index-1],por[data_index-1]],[0.0,cprob[data_index-1]],color = 'red',linestyle='dashed')\n",
    "    plt.plot([por[data_index-1],3.0],[cprob[data_index-1],cprob[data_index-1]],color = 'red',linestyle='dashed')\n",
    "    plt.annotate('x = ' + str(round(por[data_index-1],2)), xy=(por[data_index-1]+0.003, 0.01))\n",
    "    plt.annotate('p = ' + str(round(cprob[data_index-1],2)), xy=(0.225, cprob[data_index-1]+0.02))\n",
    "\n",
    "    \n",
    "    plt.subplot(132)\n",
    "    plt.plot(y,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "    plt.scatter(y,cprob,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "    plt.grid(); plt.xlim([-3.0,3.0]); plt.ylim([0.0,1.0])\n",
    "    plt.xlabel(\"Gaussian Transformed Feature, $y$\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"After Distribution Transformation to Gaussian\")\n",
    "    plt.plot([-3.0,y[data_index-1]],[cprob[data_index-1],cprob[data_index-1]],color = 'red',linestyle='dashed')\n",
    "    plt.plot([y[data_index-1],y[data_index-1]],[0.0,cprob[data_index-1]],color = 'red',linestyle='dashed')\n",
    "    #plt.arrow(y[data_index-1],cprob[data_index-1],0.0,-1.0*(cprob[data_index-1]-0.01),color = 'red',width = 0.02, head_width = 0.1, linestyle='dashed', head_length = 0.01)\n",
    "    plt.annotate('p = ' + str(round(cprob[data_index-1],2)), xy=(-2.90, cprob[data_index-1]+0.02)) \n",
    "    plt.annotate('y = ' + str(round(y[data_index-1],2)), xy=(y[data_index-1]+0.1, 0.01))\n",
    "    \n",
    "    plt.subplot(133)\n",
    "    plt.plot(por,y, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "    plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([-3.0,3.0])\n",
    "    plt.xlabel(\"Original Porosity (fraction)\"); plt.ylabel(\"Gaussian Transformed Porosity (N[fraction])\"); plt.title(\"Parametric Distribution Transformation, Q-Q Plot\")\n",
    "    #plt.plot([0.05,0.25],[0.05,0.25],color = 'red',linestyle='dashed', alpha = 0.4)\n",
    "    plt.scatter(por[data_index-1],y[data_index-1],s = 50, c = 'red', edgecolor = 'black', alpha = 1.0, zorder=200) # plot the CDF points\n",
    "    plt.scatter(por,y,s = 20, c = 'red', edgecolor = 'black', alpha = 0.1, zorder=100) # plot the CDF points\n",
    "   \n",
    "    plt.subplots_adjust(left=0.0, bottom=0.0, right=3.0, top=1.2, wspace=0.2, hspace=0.2)\n",
    "    plt.show()\n",
    "    \n",
    "# connect the function to make the samples and plot to the widgets    \n",
    "interactive_plot = widgets.interactive_output(run_plot, {'data_index':data_index})\n",
    "interactive_plot.clear_output(wait = True)               # reduce flickering by delaying plot updating"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Interactive Data Analytics Distribution Transformation Demonstration \n",
    "\n",
    "#### Michael Pyrcz, Professor, The University of Texas at Austin \n",
    "\n",
    "Select any data value and observe the distribution transform by mapping through cumulative probability.\n",
    "\n",
    "### The Inputs\n",
    "\n",
    "* **data_index** - the data index from 1 to n in the sorted ascending order"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "902f1ea179b24d43beba7f1a4aea9a98",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "VBox(children=(Text(value='                                                  Data Analytics, Distribution Tran…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8e02c9196d0d47ffbf9e7bf60f11236d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output(outputs=({'output_type': 'display_data', 'data': {'text/plain': '<Figure size 432x288 with 3 Axes>', 'i…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(ui, interactive_plot)                           # display the interactive plot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Distribution Transform to a Non-Parametric Distribution\n",
    "\n",
    "We can apply the mapping through cumulative probabilities to transform from any distribution to any other distribution.\n",
    "\n",
    "* let's make a new data set by randomly sampling from the previous one and adding error\n",
    "\n",
    "Then we can demonstrate transforming this dataset to match the original distribution\n",
    "\n",
    "* this is mimicking the situation where we transform a dataset to match the distribution of a better sampled analog distribution\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The sample ndarray has a shape of (30,).\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_sample = 30\n",
    "df_sample = df.sample(n_sample,random_state = seed)\n",
    "                      \n",
    "df_sample = df_sample.copy(deep = True) # make a deepcopy of the feature from the DataFrame\n",
    "\n",
    "df_sample['Porosity'] = df_sample['Porosity'].values + np.random.normal(loc = 0.0, scale = 0.01, size = n_sample)\n",
    "\n",
    "df_sample = df_sample.sort_values(by = 'Porosity')                # sort the DataFrame\n",
    "por_sample = df_sample['Porosity'].values\n",
    "print('The sample ndarray has a shape of ' + str(por_sample.shape) + '.')\n",
    "\n",
    "cprob_sample = np.zeros(n_sample)\n",
    "for i in range(0,n_sample):\n",
    "    index = i + 1\n",
    "    cprob_sample[i] = index / n_sample       # known upper tail\n",
    "    # cprob[i] = (index - 1)/n               # known lower tail\n",
    "    # cprob[i] = (index - 1)/(n - 1)         # known upper and lower tails\n",
    "    # cprob[i] = index/(n+1)                 # unknown tails  \n",
    "\n",
    "plt.subplot(121)\n",
    "plt.plot(por_sample,cprob_sample, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(por_sample,cprob_sample,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Sparse Sample with Noise Cumulative Distribution Function\")\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.plot(por,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(por,cprob,s = 10, alpha = 1.0, c = 'red', edgecolor = 'black') # plot the CDF points\n",
    "plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Non-parametric Porosity Cumulative Distribution Function\")\n",
    "\n",
    "plt.subplots_adjust(left=0.0, bottom=0.0, right=2.0, top=1.2, wspace=0.2, hspace=0.2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's transform the values and show them on the target distribution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_sample = np.zeros(n_sample)\n",
    "\n",
    "for i in range(0,n_sample):\n",
    "    y_sample[i] = np.percentile(por,cprob_sample[i]*100, interpolation = 'linear') # piecewise linear interpolation of inverse of target CDF \n",
    "    \n",
    "plt.subplot(121)\n",
    "plt.plot(por_sample,cprob_sample, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(por_sample,cprob_sample,s = 30, alpha = 1.0, c = 'green', edgecolor = 'black', zorder = 100) # plot the CDF points\n",
    "plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Sparse Sample with Noise Cumulative Distribution Function\")\n",
    "\n",
    "plt.subplot(122)\n",
    "plt.plot(por,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "plt.scatter(por,cprob,s = 10, c = 'red', edgecolor = 'black', alpha = 0.3) # plot the CDF points\n",
    "plt.scatter(y_sample,cprob_sample,s = 30, c = 'green', edgecolor = 'black', alpha = 1.0, zorder = 100) # plot the CDF points\n",
    "plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Non-parametric Porosity Cumulative Distribution Function\")\n",
    "\n",
    "plt.subplots_adjust(left=0.0, bottom=0.0, right=2.0, top=1.2, wspace=0.2, hspace=0.2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's make an interactive version of this plot to visualize the transformation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# widgets and dashboard\n",
    "l_sample = widgets.Text(value='                                                  Data Analytics, Distribution Transformation, Prof. Michael Pyrcz, The University of Texas at Austin',layout=Layout(width='950px', height='30px'))\n",
    "\n",
    "data_index_sample = widgets.IntSlider(min=1, max = n_sample, value=1.0, step = 1.0, description = 'Data Sample Index, $\\\\beta$',orientation='horizontal', style = {'description_width': 'initial'}, continuous_update=False)\n",
    "\n",
    "ui_sample = widgets.VBox([l_sample,data_index_sample],)\n",
    "\n",
    "def run_plot_sample(data_index_sample):                       # make data, fit models and plot\n",
    "    plt.subplot(131)\n",
    "    plt.plot(por_sample,cprob_sample, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "    plt.scatter(por_sample,cprob_sample,s = 30, alpha = 1.0, c = 'green', edgecolor = 'black',zorder = 100) # plot the CDF points\n",
    "    plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "    plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Original Sparse Sample with Noise, Cumulative Distribution Function\")\n",
    "    plt.plot([por_sample[data_index_sample-1],por_sample[data_index_sample-1]],[0.0,cprob_sample[data_index_sample-1]],color = 'red',linestyle='dashed')\n",
    "    plt.plot([por_sample[data_index_sample-1],3.0],[cprob_sample[data_index_sample-1],cprob_sample[data_index_sample-1]],color = 'red',linestyle='dashed')\n",
    "    plt.annotate('x = ' + str(round(por_sample[data_index_sample-1],2)), xy=(por_sample[data_index_sample-1]+0.003, 0.01))\n",
    "    plt.annotate('p = ' + str(round(cprob_sample[data_index_sample-1],2)), xy=(0.225, cprob_sample[data_index_sample-1]+0.02))\n",
    "    \n",
    "    plt.subplot(132)\n",
    "    plt.plot(por,cprob, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "    plt.scatter(por,cprob,s = 10, c = 'red', edgecolor = 'black', alpha = 1.0) # plot the CDF points\n",
    "    plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.0,1.0])\n",
    "    plt.xlabel(\"Porosity (fraction)\"); plt.ylabel(\"Cumulative Probability\"); plt.title(\"Non-parametric Target Porosity Cumulative Distribution Function\")\n",
    "    plt.plot([0.0,y_sample[data_index_sample-1]],[cprob_sample[data_index_sample-1],cprob_sample[data_index_sample-1]],color = 'red',linestyle='dashed')\n",
    "    plt.plot([y_sample[data_index_sample-1],y_sample[data_index_sample-1]],[0.0,cprob_sample[data_index_sample-1]],color = 'red',linestyle='dashed')\n",
    "    plt.annotate('p = ' + str(round(cprob_sample[data_index_sample-1],2)), xy=(0.053, cprob_sample[data_index_sample-1]+0.02)) \n",
    "    plt.annotate('y = ' + str(round(y_sample[data_index_sample-1],2)), xy=(y_sample[data_index_sample-1]+0.003, 0.01))\n",
    "    plt.scatter(y_sample[data_index_sample-1],cprob_sample[data_index_sample-1],s = 50, c = 'green', edgecolor = 'black', alpha = 1.0, zorder=100) # plot the CDF points\n",
    "    \n",
    "    plt.subplot(133)\n",
    "    plt.plot(por_sample,y_sample, alpha = 0.2, c = 'black') # plot piecewise linear interpolation\n",
    "    plt.grid(); plt.xlim([0.05,0.25]); plt.ylim([0.05,0.25])\n",
    "    plt.xlabel(\"Original Porosity (fraction)\"); plt.ylabel(\"Transformed Porosity (fraction)\"); plt.title(\"Non-parametric Distribution Transformation, Q-Q Plot\")\n",
    "    plt.plot([0.05,0.25],[0.05,0.25],color = 'red',linestyle='dashed', alpha = 0.4)\n",
    "    plt.scatter(por_sample[data_index_sample-1],y_sample[data_index_sample-1],s = 50, c = 'green', edgecolor = 'black', alpha = 1.0, zorder=200) # plot the CDF points\n",
    "    plt.scatter(por_sample,y_sample,s = 20, c = 'green', edgecolor = 'black', alpha = 0.3, zorder=100) # plot the CDF points\n",
    "        \n",
    "    plt.subplots_adjust(left=0.0, bottom=0.0, right=3.0, top=1.2, wspace=0.2, hspace=0.2)\n",
    "    plt.show()\n",
    "    \n",
    "    \n",
    "    \n",
    "# connect the function to make the samples and plot to the widgets    \n",
    "interactive_plot_s = widgets.interactive_output(run_plot_sample, {'data_index_sample':data_index_sample})\n",
    "#interactive_plot_sample.clear_output(wait = True)               # reduce flickering by delaying plot updating"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Interactive Data Analytics Distribution Transformation Demonstration \n",
    "\n",
    "#### Michael Pyrcz, Professor, The University of Texas at Austin \n",
    "\n",
    "Select any data value and observe the distribution transform by mapping through cumulative probability.\n",
    "\n",
    "#### The Inputs\n",
    "\n",
    "* **data_index** - the data index from 1 to n in the sorted ascending order"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b5d144bc40844eab96e1b7e6c63b5ed2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "VBox(children=(Text(value='                                                  Data Analytics, Distribution Tran…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "71a295d8760748d0a61403e72091ec91",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output(outputs=({'output_type': 'display_data', 'data': {'text/plain': '<Figure size 432x288 with 3 Axes>', 'i…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(ui_sample, interactive_plot_s)                           # display the interactive plot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To summarize let's look at a DataFrame with the original noisey sample and the transformed to match the original distribution.\n",
    "\n",
    "* we're making and showing a table of original values, $x_{\\beta}$ $\\forall$ $\\beta = 1, \\ldots, n_{sample}$, and the transformed values, $y_{\\beta}$ $\\forall$ $\\beta = 1, \\ldots, n_{sample}$.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>X</th>\n",
       "      <th>Y</th>\n",
       "      <th>Facies</th>\n",
       "      <th>Porosity</th>\n",
       "      <th>Perm</th>\n",
       "      <th>AI</th>\n",
       "      <th>Transformed_Por</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>201.0</td>\n",
       "      <td>426.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.089195</td>\n",
       "      <td>0.400658</td>\n",
       "      <td>5263.542112</td>\n",
       "      <td>0.081044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>201.0</td>\n",
       "      <td>456.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.094670</td>\n",
       "      <td>0.546396</td>\n",
       "      <td>5018.355476</td>\n",
       "      <td>0.085867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>900.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.096598</td>\n",
       "      <td>1.280257</td>\n",
       "      <td>4573.656072</td>\n",
       "      <td>0.091834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>600.0</td>\n",
       "      <td>700.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.101975</td>\n",
       "      <td>12.384496</td>\n",
       "      <td>3595.586977</td>\n",
       "      <td>0.095628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>100.0</td>\n",
       "      <td>600.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.102261</td>\n",
       "      <td>2.446678</td>\n",
       "      <td>5201.637996</td>\n",
       "      <td>0.099378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>226</th>\n",
       "      <td>211.0</td>\n",
       "      <td>396.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.103762</td>\n",
       "      <td>6.368529</td>\n",
       "      <td>5725.334803</td>\n",
       "      <td>0.101987</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>100.0</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.108687</td>\n",
       "      <td>3.691908</td>\n",
       "      <td>5295.267191</td>\n",
       "      <td>0.103970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>218</th>\n",
       "      <td>251.0</td>\n",
       "      <td>416.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.109159</td>\n",
       "      <td>1.003374</td>\n",
       "      <td>5822.467914</td>\n",
       "      <td>0.106704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>900.0</td>\n",
       "      <td>900.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.111040</td>\n",
       "      <td>12.433996</td>\n",
       "      <td>6242.704810</td>\n",
       "      <td>0.108460</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>500.0</td>\n",
       "      <td>400.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.112703</td>\n",
       "      <td>6.312198</td>\n",
       "      <td>5515.918646</td>\n",
       "      <td>0.111491</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>210</th>\n",
       "      <td>231.0</td>\n",
       "      <td>426.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.116965</td>\n",
       "      <td>5.584040</td>\n",
       "      <td>4919.074871</td>\n",
       "      <td>0.113887</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>800.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.131186</td>\n",
       "      <td>7.739105</td>\n",
       "      <td>5274.532660</td>\n",
       "      <td>0.117984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>600.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.143861</td>\n",
       "      <td>42.396044</td>\n",
       "      <td>4204.150893</td>\n",
       "      <td>0.121592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>245</th>\n",
       "      <td>690.0</td>\n",
       "      <td>529.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.172408</td>\n",
       "      <td>316.905689</td>\n",
       "      <td>4271.013148</td>\n",
       "      <td>0.127131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>84</th>\n",
       "      <td>955.0</td>\n",
       "      <td>559.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.183562</td>\n",
       "      <td>74.215058</td>\n",
       "      <td>3386.182722</td>\n",
       "      <td>0.137062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150</th>\n",
       "      <td>985.0</td>\n",
       "      <td>489.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.185171</td>\n",
       "      <td>73.133040</td>\n",
       "      <td>2672.294567</td>\n",
       "      <td>0.153759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158</th>\n",
       "      <td>975.0</td>\n",
       "      <td>479.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.185172</td>\n",
       "      <td>69.336576</td>\n",
       "      <td>2493.128177</td>\n",
       "      <td>0.176536</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93</th>\n",
       "      <td>955.0</td>\n",
       "      <td>549.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.186417</td>\n",
       "      <td>374.298925</td>\n",
       "      <td>3181.557281</td>\n",
       "      <td>0.185270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>165</th>\n",
       "      <td>955.0</td>\n",
       "      <td>469.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.195644</td>\n",
       "      <td>26.197239</td>\n",
       "      <td>2889.196647</td>\n",
       "      <td>0.188136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>975.0</td>\n",
       "      <td>489.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.197035</td>\n",
       "      <td>21.109085</td>\n",
       "      <td>2412.875330</td>\n",
       "      <td>0.191655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>995.0</td>\n",
       "      <td>489.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.198042</td>\n",
       "      <td>460.494986</td>\n",
       "      <td>2792.804322</td>\n",
       "      <td>0.195998</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>113</th>\n",
       "      <td>975.0</td>\n",
       "      <td>529.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.203166</td>\n",
       "      <td>1548.094062</td>\n",
       "      <td>3167.185377</td>\n",
       "      <td>0.198182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>1005.0</td>\n",
       "      <td>519.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.206458</td>\n",
       "      <td>54.667195</td>\n",
       "      <td>2577.714678</td>\n",
       "      <td>0.199315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>935.0</td>\n",
       "      <td>449.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.206652</td>\n",
       "      <td>368.507601</td>\n",
       "      <td>4249.477923</td>\n",
       "      <td>0.201943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>955.0</td>\n",
       "      <td>529.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.209992</td>\n",
       "      <td>1113.971076</td>\n",
       "      <td>3177.635737</td>\n",
       "      <td>0.206934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>136</th>\n",
       "      <td>935.0</td>\n",
       "      <td>499.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.212483</td>\n",
       "      <td>523.287810</td>\n",
       "      <td>2579.032897</td>\n",
       "      <td>0.209051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>925.0</td>\n",
       "      <td>539.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.213423</td>\n",
       "      <td>211.163296</td>\n",
       "      <td>3442.885245</td>\n",
       "      <td>0.211638</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129</th>\n",
       "      <td>955.0</td>\n",
       "      <td>509.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.220778</td>\n",
       "      <td>1525.247066</td>\n",
       "      <td>2512.061434</td>\n",
       "      <td>0.215686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>955.0</td>\n",
       "      <td>459.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.221159</td>\n",
       "      <td>45.002088</td>\n",
       "      <td>3394.563038</td>\n",
       "      <td>0.224214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>985.0</td>\n",
       "      <td>499.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.224078</td>\n",
       "      <td>68.276148</td>\n",
       "      <td>2547.526113</td>\n",
       "      <td>0.242298</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          X      Y  Facies  Porosity         Perm           AI  \\\n",
       "207   201.0  426.0     0.0  0.089195     0.400658  5263.542112   \n",
       "189   201.0  456.0     0.0  0.094670     0.546396  5018.355476   \n",
       "80    900.0  100.0     0.0  0.096598     1.280257  4573.656072   \n",
       "47    600.0  700.0     0.0  0.101975    12.384496  3595.586977   \n",
       "3     100.0  600.0     0.0  0.102261     2.446678  5201.637996   \n",
       "226   211.0  396.0     0.0  0.103762     6.368529  5725.334803   \n",
       "5     100.0  400.0     0.0  0.108687     3.691908  5295.267191   \n",
       "218   251.0  416.0     0.0  0.109159     1.003374  5822.467914   \n",
       "72    900.0  900.0     0.0  0.111040    12.433996  6242.704810   \n",
       "41    500.0  400.0     0.0  0.112703     6.312198  5515.918646   \n",
       "210   231.0  426.0     0.0  0.116965     5.584040  4919.074871   \n",
       "71    800.0  100.0     0.0  0.131186     7.739105  5274.532660   \n",
       "53    600.0  100.0     1.0  0.143861    42.396044  4204.150893   \n",
       "245   690.0  529.0     1.0  0.172408   316.905689  4271.013148   \n",
       "84    955.0  559.0     1.0  0.183562    74.215058  3386.182722   \n",
       "150   985.0  489.0     1.0  0.185171    73.133040  2672.294567   \n",
       "158   975.0  479.0     1.0  0.185172    69.336576  2493.128177   \n",
       "93    955.0  549.0     1.0  0.186417   374.298925  3181.557281   \n",
       "165   955.0  469.0     1.0  0.195644    26.197239  2889.196647   \n",
       "149   975.0  489.0     1.0  0.197035    21.109085  2412.875330   \n",
       "151   995.0  489.0     1.0  0.198042   460.494986  2792.804322   \n",
       "113   975.0  529.0     1.0  0.203166  1548.094062  3167.185377   \n",
       "125  1005.0  519.0     1.0  0.206458    54.667195  2577.714678   \n",
       "181   935.0  449.0     1.0  0.206652   368.507601  4249.477923   \n",
       "111   955.0  529.0     1.0  0.209992  1113.971076  3177.635737   \n",
       "136   935.0  499.0     1.0  0.212483   523.287810  2579.032897   \n",
       "99    925.0  539.0     1.0  0.213423   211.163296  3442.885245   \n",
       "129   955.0  509.0     1.0  0.220778  1525.247066  2512.061434   \n",
       "174   955.0  459.0     1.0  0.221159    45.002088  3394.563038   \n",
       "141   985.0  499.0     1.0  0.224078    68.276148  2547.526113   \n",
       "\n",
       "     Transformed_Por  \n",
       "207         0.081044  \n",
       "189         0.085867  \n",
       "80          0.091834  \n",
       "47          0.095628  \n",
       "3           0.099378  \n",
       "226         0.101987  \n",
       "5           0.103970  \n",
       "218         0.106704  \n",
       "72          0.108460  \n",
       "41          0.111491  \n",
       "210         0.113887  \n",
       "71          0.117984  \n",
       "53          0.121592  \n",
       "245         0.127131  \n",
       "84          0.137062  \n",
       "150         0.153759  \n",
       "158         0.176536  \n",
       "93          0.185270  \n",
       "165         0.188136  \n",
       "149         0.191655  \n",
       "151         0.195998  \n",
       "113         0.198182  \n",
       "125         0.199315  \n",
       "181         0.201943  \n",
       "111         0.206934  \n",
       "136         0.209051  \n",
       "99          0.211638  \n",
       "129         0.215686  \n",
       "174         0.224214  \n",
       "141         0.242298  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sample['Transformed_Por'] = y_sample\n",
    "df_sample.head(n=n_sample)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It would be straitforward to modify the code above to perform distribution transformations:\n",
    "\n",
    "* to a parametric distribution like Gaussian\n",
    "\n",
    "* to a non-parametric distribution from actual data (build a CDF and interpolate between the data samples)\n",
    "\n",
    "#### Comments\n",
    "\n",
    "This was a basic demonstration of distribution transformations. \n",
    "\n",
    "I have other demonstrations on the basics of working with DataFrames, ndarrays, univariate statistics, plotting data, declustering, data transformations, trend modeling and many other workflows available at [Python Demos](https://github.com/GeostatsGuy/PythonNumericalDemos) and a Python package for data analytics and geostatistics at [GeostatsPy](https://github.com/GeostatsGuy/GeostatsPy). \n",
    "  \n",
    "I hope this was helpful,\n",
    "\n",
    "*Michael*\n",
    "\n",
    "#### The Author:\n",
    "\n",
    "### Michael Pyrcz, Associate Professor, University of Texas at Austin \n",
    "*Novel Data Analytics, Geostatistics and Machine Learning Subsurface Solutions*\n",
    "\n",
    "With over 17 years of experience in subsurface consulting, research and development, Michael has returned to academia driven by his passion for teaching and enthusiasm for enhancing engineers' and geoscientists' impact in subsurface resource development. \n",
    "\n",
    "For more about Michael check out these links:\n",
    "\n",
    "#### [Twitter](https://twitter.com/geostatsguy) | [GitHub](https://github.com/GeostatsGuy) | [Website](http://michaelpyrcz.com) | [GoogleScholar](https://scholar.google.com/citations?user=QVZ20eQAAAAJ&hl=en&oi=ao) | [Book](https://www.amazon.com/Geostatistical-Reservoir-Modeling-Michael-Pyrcz/dp/0199731446) | [YouTube](https://www.youtube.com/channel/UCLqEr-xV-ceHdXXXrTId5ig)  | [LinkedIn](https://www.linkedin.com/in/michael-pyrcz-61a648a1)\n",
    "\n",
    "#### Want to Work Together?\n",
    "\n",
    "I hope this content is helpful to those that want to learn more about subsurface modeling, data analytics and machine learning. Students and working professionals are welcome to participate.\n",
    "\n",
    "* Want to invite me to visit your company for training, mentoring, project review, workflow design and / or consulting? I'd be happy to drop by and work with you! \n",
    "\n",
    "* Interested in partnering, supporting my graduate student research or my Subsurface Data Analytics and Machine Learning consortium (co-PIs including Profs. Foster, Torres-Verdin and van Oort)? My research combines data analytics, stochastic modeling and machine learning theory with practice to develop novel methods and workflows to add value. We are solving challenging subsurface problems!\n",
    "\n",
    "* I can be reached at mpyrcz@austin.utexas.edu.\n",
    "\n",
    "I'm always happy to discuss,\n",
    "\n",
    "*Michael*\n",
    "\n",
    "Michael Pyrcz, Ph.D., P.Eng. Professor, Cockrell School of Engineering and The Jackson School of Geosciences, The University of Texas at Austin\n",
    "\n",
    "#### More Resources Available at: [Twitter](https://twitter.com/geostatsguy) | [GitHub](https://github.com/GeostatsGuy) | [Website](http://michaelpyrcz.com) | [GoogleScholar](https://scholar.google.com/citations?user=QVZ20eQAAAAJ&hl=en&oi=ao) | [Book](https://www.amazon.com/Geostatistical-Reservoir-Modeling-Michael-Pyrcz/dp/0199731446) | [YouTube](https://www.youtube.com/channel/UCLqEr-xV-ceHdXXXrTId5ig)  | [LinkedIn](https://www.linkedin.com/in/michael-pyrcz-61a648a1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
